import os
from typing import List

from pdf2docx import Converter

from script_executor.Domain import Domain, InputItem


class Pdf2Word(Domain):
    """继承自Domain类，必须实现所有抽象方法"""

    def __init__(self):
        self.pdf_path = None
        self.word_path = None

    def get_input_items(self) -> List[InputItem]:
        """定义需要的输入项：Excel文件路径和工作表选择"""
        return [
            InputItem(
                label="扫描文件路径",
                input_name="pdf_path",
                input_type="file",
                default_value="",
                placeholder_text="请选择pdf文件路径",
                options=[]
            ), InputItem(
                label="结果文件路径",
                input_name="word_path",
                input_type="folder",
                default_value="",
                placeholder_text="请选择转换后的word文件存放路径",
                options=[]
            )
        ]

    def execute(self) -> str:
        """
            将PDF文件转换为Word文档

            参数:
                pdf_path: PDF文件的路径
                word_path: 输出Word文档的路径，默认为与PDF同目录同名称的.docx文件
            """
        # 检查PDF文件是否存在
        if not os.path.exists(self.pdf_path):
            return f"错误: PDF文件 '{self.pdf_path}' 不存在"

        try:
            # 创建转换器实例
            cv = Converter(self.pdf_path)

            # 转换PDF到Word
            word_file_path = os.path.join(self.word_path, self.get_word_filename())
            cv.convert(word_file_path, start=0, end=None)

            # 关闭转换器
            cv.close()

            return f"转换完成！Word文件已保存至: {self.word_path}"

        except Exception as e:
            return f"转换过程中发生错误: {str(e)}"

    def get_word_filename(self):
        # 获取文件名（包含扩展名）
        pdf_filename = os.path.basename(self.pdf_path)

        # 分离文件名和扩展名
        filename_without_ext = os.path.splitext(pdf_filename)[0]

        # 构建新的 .docx 文件名
        docx_filename = f"{filename_without_ext}.docx"
        return docx_filename